对象存储 Bucket 究竟是什么?
大纲
Bucket
Bucket 是什么?
Bucket 命名规范
Bucket 权限类别
Bucket 的创建
Bucket 的删除
思考问题
Bucket 是什么?
对象存储系列文章,从 Bucket 谈起。对象存储里面只有两个跟资源相关的名词:Bucket,Object。Bucket 中文直译为”桶“,Object 显而易见就是”对象“。所有 Object 都必须属于某个 Bucket,无一例外。Bucket 通常也是计费、权限控制、生命周期等高级功能的管理实体。
一般来讲,公有云厂商会确保 Bucket 名称在全球地域服务具有全局唯一性,且不能修改。比如说,你使用 AWS 的 S3 服务,在北美地域有个叫做 Test 的 Bucket,在其他地域就不允许有同名的 Bucket 了。其实国内的公有云厂商个别做差异化的时候,在这个地方会有不一样,比如允许不同地域可以有同名的 Bucket。这个带来的好处就是用户方便了,因为不同地域可以设置相同 Bucket 了,不好的地方就是对象存储系统本身的实现可能会相对复杂。
一般来讲,Bucket 作为一个抽象的容器概念,空间是无限的,也就是说,用户存放的 Object 的数量和大小总量没有限制,空间大小只依赖于实际的物理资源,公有云厂商也是希望你存储进来的数据越多越好,他们才有赚头呀(机器不够他们随时可以扩容,这个用户是不感知的)。
Bucket 命名规范
公有云厂商一般都会有这个限制,这个和 S3 限制的一致:
只能包括小写字母,数字,短横线(-) 必须以小写字母或者数字开头 长度必须在 3-63 字节之间
Bucket 权限类别
Bucket默认提供三种访问权限:私有读写、公有读私有写和公有读写。其访问权限可通过对象存储控制台上Bucket的权限管理进行修改。
私有读写
只有 Bucket 的创建者或者被授权的账号才对该 Bucket 中的 Object 有读写权限,其他人对该 Bucket 中的 Object 都没有读写权限。Bucket 访问权限默认就是私有读写,也就是要 AK/Sk 来访问。
公有读私有写
任何人(包括匿名访问者)都对该 Bucket 中 Object 有读权限,但只有 Bucket 创建者及被授权的账号才对该 Bucket 中 Object 有写权限。
公有读写
任何人(包括匿名访问者)都对该 Bucket 中对象有读权限和写权限。这种方式用起来要慎重点,方便是方便了,但是安全系数最低。
Bucket 的创建
一般可以使用 3 种方式来创建一个 Bucket,这三种方式也是操作对象的三种方式(本质上都是一种啦,发送正确的 S3 协议包给到对象存储服务系统):
方式一:使用公有云的用户 Portal 系统
这个是新手最早接触到,也是容易接受的一种方式。一般用来体验对象存储简单的上传下载。
方式二:使用 SDK
按照自己的技术栈,选定特定语言的 SDK 版本。比如你可以选择 S3 的 golang 版本的 SDK。
方式三:使用第三方工具
可以用公有云厂商自己提供的工具。比如,阿里 OSS 提供了 ossutil 命令行工具和 ossbrowser 图形化工具。腾讯 COSCMD 命令行工具,七牛提供了 qshell 工具; 也可以用开源免费的第三方工具,比如 S3Browser、S3Cmd 等第三方工具;
Bucket 的删除
S3 的实现中,必须要是空 Bucket 才能被删除。(但其实这个也是一个有差异化的功能,公有云厂商有些场景是允许非空 Bucket 的删除的)
思考问题
问题一:Bucket 到底是什么,有没有一个实体?
我们知道 Object 的概念很容易理解,因为 Object 就是用户实实在在上传的数据。Bucket 呢?有没有一个实体?
其实 Bucket 就是一个命名空间而已。对象存储系统内部实现的方式也是各式各样。比如开源的 Minio 举例,Bucket 就是实现成了目录,对象就是目录下的文件。
或者,你自己实现的对象存储可以实现成字符串,这个 Bucket 里的对象只需要前缀加上这个 Bucket 前缀,等等。
问题二:对象存储有没有目录的概念?
首先明确一点,对象存储中只有 Bucket,Object 的两层关系。没有目录概念!!!
那有些小伙伴可能质疑了,我明明用 S3Browser ,ossbrowser 这样的工具就看到了目录,比如你上传一个 key 名为:"/root/dir1/test.txt" 到 Bucket 里面,root
,dir1
这个明明就是给我显示成了目录关系。
其实不是的。对于对象存储后端来讲,你只是上传了一个 key = “/root/dir1/test.txt” 的对象,还是只有 Bucket/Object 两层关系。目录只是 s3Browser, ossbrowser 这样的客户端工具为了好看做出来的效果,客户端工具识别到 key 里面包含了斜线 “/” 之后,就用最经典的目录层次效果给你呈现了。(旁白:客户端工具给你看的友好界面,其实服务端只认最原始的 key)
Bucket 是对象存储非常重要的概念。此文概述,后面会慢慢说起和 Bucket 关联的一系列功能。
坚持思考,方向比努力更重要。关注我:奇伢云存储